package br.com.comprasPublicas.entity;

import java.io.Serializable;
import java.util.Date;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Temporal;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import org.hibernate.annotations.NamedNativeQueries;
import org.hibernate.annotations.NamedNativeQuery;

/**
 *
 * @author helsen_rafael
 * @since 11/01/11
 */
@Entity
@NamedNativeQueries({
        @NamedNativeQuery(name="order_by_id_pedido", query="SELECT * FROM pedido ORDER BY id_pedido",resultClass=Pedido.class),
        @NamedNativeQuery(name="select_max_id_pedido", query="SELECT * FROM pedido",resultClass=Pedido.class)
        })
public class Pedido implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private int id_pedido;

    @Temporal(javax.persistence.TemporalType.DATE)
    private Date data_pedido;

    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="id_secao", updatable=true, insertable=true)
    @Fetch(FetchMode.JOIN)
    @Cascade(CascadeType.SAVE_UPDATE)
    private Secao secao;

    @Column(name="objeto_compra", length=300, nullable=false)
    private String objeto_compra;

    @Column(name="solicitante", length=100)
    private String solicitante;

    @OneToMany(mappedBy="pedido", fetch=FetchType.EAGER)
    @Cascade(CascadeType.DELETE_ORPHAN)
    private Set<ItemPedido> item_pedido;

    @OneToOne(targetEntity=Cotacao.class)
    private Cotacao cotacao;

    @Cascade(CascadeType.ALL)

    //Abaixo os Encapsulamentos dos Campos

    public int getId_pedido() {
        return id_pedido;
    }

  
    public void setId_pedido(int id_pedido) {
        this.id_pedido = id_pedido;
    }

   
    public Date getData_pedido() {
        return data_pedido;
    }

   
    public void setData_pedido(Date data_pedido) {
        this.data_pedido = data_pedido;
    }

   
    public String getObjeto_compra() {
        return objeto_compra;
    }

   
    public void setObjeto_compra(String objeto_compra) {
        this.objeto_compra = objeto_compra;
    }

    public Set<ItemPedido> getItem_pedido() {
        return item_pedido;
    }

    
    public void setItem_pedido(Set<ItemPedido> item_pedido) {
        this.item_pedido = item_pedido;
    }

   
    public Secao getSecao() {
        return secao;
    }

    
    public void setSecao(Secao secao) {
        this.secao = secao;
    }

   
    public String getSolicitante() {
        return solicitante;
    }

    
    public void setSolicitante(String solicitante) {
        this.solicitante = solicitante;
    }

    
    public Cotacao getCotacao() {
        return cotacao;
    }

    
    public void setCotacao(Cotacao cotacao) {
        this.cotacao = cotacao;
    }


}
